///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
 * Original Revision : 5673
 */

/**
 * JS 페이지 공통 환경 변수. 
 * layout.jsp에서 아래 형식으로 사용해서
 * 컨텍스트패스와 이미지 서버 url을 지정해서 담습니다.
 * 필요한 변수들 정의 하시면 됩니다.
 * 
	$(document).ready(function(){
		setContextPath("${pageContext.request.contextPath }");
	});
 */
var env = {
	contextPath : ""
};

function setContextPath(paramContextPath){
	env.contextPath = paramContextPath;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////


/**
 * ## jQuery Ajax default 설정. ##
 * - jQuery를 이용한 모든 Ajax call 의 beforeSend에 blockUI를 걸어서 메세지를 띄어줍니다.
 * - Ajax call의 모든결과(stop/error/success)에 blockUI를 해제시켜 줍니다.
 * 
 * ## jQuery POST Ajax call ## 
 * - JSon 형식의 ajax call에는 postJson을..
 * - HTML 형식의 ajax call에는 postRequest를 사용하시면 됩니다.
 * 
 * ## beforeSend에 blockUI를 걸고싶지 않은 경우 ## 
 * 	$.ajax({
		type: "GET",
		url: "URL",
		beforeSend: function(xhr) {},
		success: function(data) {
			// todo
		}
	});
 *	형식으로 beforeSend를 재정의해서 사용하시면 됩니다.
 *
 * ## TIPS ##
 * - 일반 submit 호출 전에 
 * 		$.blockUI({ message: '<h4>잠시만 기다려 주세요.</h4>' });
 *   위의 구문을 사용하시면.. 이중호출 방지 및 처리중 메세지 띄우는 효과가 있답니다~~ ㅋㅋ
 *
 *	사용에 문의 있으시면 언제든 물어보셔도 됩니다~
 */
$().ajaxStop($.unblockUI); 
$().ajaxError($.unblockUI); 
$().ajaxSuccess($.unblockUI); 

$.ajaxSetup({
	global: true,
    beforeSend: function(xhr) { 
		$.blockUI({ message: '<h4>잠시만 기다려 주세요.</h4>' });  
	} ,
	success: function(data) {
		$.unblockUI();
	}
});	

$.postJSON = function(url, data, callback) {
	$.post(url, data, callback, "json");
};

$.postRequest = function(url, param, callback) {
	$.post(url, param, callback, "html");
};

/**
 * String trim
 */
String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}

/**
 * String ltrim
 */
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}

/**
 * String rtrim
 */
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}

/**
 * String replaceAll
 */
String.prototype.replaceAll = function(str1, str2){
	var temp_str = "";
	if (this.trim() != "" && str1 != str2){
		temp_str = this.trim();
		
		while (temp_str.indexOf(str1) > -1){
			temp_str = temp_str.replace(str1, str2);
		}
	}
	return temp_str;
}

/**
 * 지정된 이름, 값으로 쿠키를 지정된 만료일까지 설정.
 * @param {String} name			쿠키 이름
 * @param {String} value		쿠키 값
 * @param {Date} expires		만료일
 */
function setCookie (name, value, expires) {
	document.cookie = name + "=" + escape (value) + "; path=/; expires=" + expires.toGMTString();
}

/**
 * 쿠키 값 가져옴.
 * @param {String} name	쿠키 이름
 */
function getCookie(Name) {
	var search = Name + "="
	if (document.cookie.length > 0) {                  // 쿠키가 설정되어 있다면
		offset = document.cookie.indexOf(search)
		if (offset != -1) {                            // 쿠키가 존재하면
			offset += search.length
			end = document.cookie.indexOf(";", offset)
			if (end == -1)	end = document.cookie.length

			return unescape(document.cookie.substring(offset, end))
		}
	}

	return "";
}

/**
 * 쿠키 삭제.
 * @param {String} cookieName	쿠키 이름
 */
function deleteCookie(cookieName){
	var expireDate = new Date();	
	expireDate.setDate( expireDate.getDate() - 1 );
	document.cookie = cookieName + "= " + "; expires=" + expireDate.toGMTString() + "; path=/";
}

/**
 * 스트링 널 체크.
 * @param {String} str
 */
function isNull(str){
	if(str == null) return true;
	return !(str.replace(/(^\s*)|(\s*$)/g, ""));
}

/**
 * Object value 의 넘버 체크.
 * @param {Object} str
 */
function checkNumber(obj){
	var valueString = obj.value;
	var temp = '';
	for(i = 0; i<valueString.length; i++){
		code = valueString.charCodeAt(i);
		if(code > 47 && code < 58) temp += valueString.charAt(i);
	}
	obj.value = temp;
}

/**
 * IE의 버젼 번호 얻어옵니다.
 */
function getIEVer(){
	var retval = 0;
    var agent = navigator.userAgent.toLowerCase();
    var ver = agent.split(';');
    if(agent.indexOf('msie') != -1){
        retval = parseFloat(ver[1].slice(6, ver[1].length));
	}
	return retval;
}

/**
 * event 발생위치의 마우스 포지션
 * @param {event} event			이벤트 객체
 */	
function getMousePosition(event){
	var x = (getIEVer()<=0) ? event.pageX: window.event.clientX + document.documentElement.scrollLeft;
	var y = (getIEVer()<=0) ? event.pageY: window.event.clientY + document.documentElement.scrollTop;		
	return {"x":x,"y":y};
}

/**
 * Object 보임/숨김.
 * @param {boolean} flag 		true/false - true:보임
 * @param {String} objectId		object id
 * @param {event} event			이벤트 객체(이벤트 발생시는 발생한 위치, 없을시엔 고정위치)
 */	
function setVisibleObject(flag, objectId, event){
    var tempObject = $("#"+objectId);
	if(flag){
		if(event){
			var pos = getMousePosition(event);
			var tempCss = {		
				top: pos.y + 5,
				left: pos.x + 5
			};
			tempObject.css(tempCss);
		}
		tempObject.show();	
	}else{
		tempObject.hide();
	}	
}

/**
 * 팝업 윈도우 화면의 중간에 위치.
 * @param {String} targetUrl	팝업 윈도우의 내용을 구성하기 위한 호출 URL
 * @param {String} windowName	팝업 윈도우의 이름
 * @param {Object} properties	팝업 윈도우의 속성(넓이, 높이, x/y좌표)
 */	
function centerPopupWindow(targetUrl, windowName, properties) {
	var childWidth = properties.childWidth;
	var childHeight = properties.childHeight;
	var childTop = (screen.height - childHeight) / 2 - 50;    // 아래가 가리는 경향이 있어서 50을 줄임
	var childLeft = (screen.width - childWidth) / 2;
	var popupProps = "width=" + childWidth + ",height=" + childHeight + ", top=" + childTop + ", left=" + childLeft;
	if (properties.scrollBars == "YES") {
		popupProps += ", scrollbars=yes";
	}

	var popupWin = window.open(targetUrl, windowName, popupProps);
	popupWin.focus();
}

/**
 * 팝업 레이어 생성.
 * @param {String} layerId
 */
function createPopupLayer(layerId){
	var layerHtml = "";
	if(navigator.userAgent.indexOf("MSIE 6")>-1 && navigator.userAgent.indexOf("MSIE 7")<0){
		layerHtml += "<div id=\"" + layerId + "\" class=\"popup_area\" style=\"position:absolute; display:none;\">";
	} else {
		layerHtml += "<div id=\"" + layerId + "\" class=\"popup_area\" style=\"position:fixed; display:none;\">";
	}
	
	//var scrollTop = document.body.scrollTop + 30; // 종스크롤에 따른 레이어 위치 조정
	//layerHtml += "<div id=\"" + layerId + "\" class=\"popup_area\" style=\"position:relative;top:" + scrollTop + "px;left:30px; display:none;\">";

	layerHtml += "<div class=\"popup_top\"><img src=\"" + env.contextPath + "/images/popup/box_top2.gif\" alt=\"\" /></div>";
	layerHtml += "<div class=\"popup_content_bg\">";
	layerHtml += "<div id=\"" + layerId + "_body\" class=\"popup_content\"></div>";
	layerHtml += "</div>";
	layerHtml += "<div class=\"popup_bottom\">";
	layerHtml += "<img src=\"" + env.contextPath + "/images/popup/box_bottom2.gif\" alt=\"close\" usemap=\"#Map\" />";
	layerHtml += "<map name=\"Map\" id=\"Map\"><area shape=\"rect\" coords=\"356,1,406,17\" href=\"#\" onclick=\"javascript:closePopupLayer('" + layerId + "'); return false;\"/></map>";
	layerHtml += "</div>";
	layerHtml += "</div>";
	
	$("#layerArea").append(layerHtml);
}

/**
 * 레이어 팝업.
 * @param {String} targetLayerId  타겟 레이어 id
 * @param {String} parentLayerId  타겟 레이어의 parent 레이어 Id
 */
function showPopupLayer(targetLayerId, parentLayerId){	
    var targetLayer = $("#"+targetLayerId);
	var layerTop = (screen.height - targetLayer.height()) / 2 - 150;    // 아래로 치우친 경향이 있어서 150 줄임
	var layerLeft = (screen.width - targetLayer.width()) / 2;
	
	var zindex = 10;
	if(parentLayerId){
		var parentLayer = $("#"+parentLayerId);
		if(parentLayer.css("z-index") != "auto"){
			var zIndexValue = parentLayer.css("z-index") + "|"; // parentLayer.css("z-index") 의 반환값은 string이 아닌듯
			//alert(zIndexValue);
			if(zIndexValue != "undefined|") {
				zindex = parseInt(parentLayer.css("z-index")) + 10;
			}
			//alert(zindex);
		}
	}

	targetLayer.css("top", layerTop);
	targetLayer.css("left", layerLeft);
	//alert(zindex);
	targetLayer.css("z-index", zindex);
	targetLayer.fadeIn("slow");	
	
	setDimm(targetLayerId, true);
}

/**
 * 팝업 레이어 닫기
 * @param {String} targetLayerId  타겟 레이어 id
 */
function closePopupLayer(targetLayerId){
	$("#"+targetLayerId).fadeOut("slow");	
	$("#"+targetLayerId).remove();
	if( navigator.appVersion.indexOf( "MSIE 6" ) > -1 )	{
		$("#contsType").show();
		$("#genxPlayerVer").show();
		$("#sdkVer").show();
		$("#wpVmVer").show();
		$("#wmVmVer").show();
		$("#wgEngnVer").show();
	}
	setDimm(targetLayerId, false);
}

/**
 * 타겟 레이어의 딤드처리 설정/해제.
 * @param {String} targetLayerId	타겟 레이어 id
 * @param {Boolean} falg 			true/false
 */
function setDimm(targetLayerId, flag){
	if(flag){
		var htmlStr = "<div id=\"temp_"+targetLayerId+"\" class=\"dimmed\"></div>"
		$("#bodyFrame").append(htmlStr);
		
		if(document.body.clientHeight > document.documentElement.clientHeight){
			$("#temp_"+targetLayerId).css("height", document.body.clientHeight + "px");
		}
		$("#temp_"+targetLayerId).css("z-index", parseInt($("#"+targetLayerId).css("z-index"))-1);

		// 셀렉트박스 hidden 처리
		//$("select").css("visibility","hidden");
		var svn = document.getElementsByTagName("select");
		for (a=0; a<svn.length; a++) {
			if ($(svn[a]).offsetParent().attr("id") != targetLayerId) {
				svn[a].style.visibility = "hidden";
			}
		}
	}else{
		$("#temp_"+targetLayerId).remove();
		// 셀렉트박스 살리기
		$("select").css("visibility","visible");
	}
}

/**
 * 영문 한글 변환.
 * @param {String} str 입력 문자열
 * @return {String} 한글로 변환된 문자열
 */
function convertEngCharToKor(str){
	var en_h = "rRseEfaqQtTdwWczxvg"; 
	var reg_h = "[" + en_h + "]"; 		
	
	var reg_b = "hk|ho|hl|nj|np|nl|ml|k|o|i|O|j|p|u|P|h|y|n|b|m|l";		
	
	var reg_f = "rt|sw|sg|fr|fa|fq|ft|fx|fv|fg|qt|r|R|s|e|f|a|q|t|T|d|w|c|z|x|v|g|";		
	var reg_exp = new RegExp("("+reg_h+")("+reg_b+")((?:"+reg_f+")(?=(?:"+reg_h+")(?:"+reg_b+"))|(?:"+reg_f+"))","g");
	return str.replace(reg_exp,_korReplace); 
}

/**
 * 주어진 문자열에서 영문 한글 변환.
 * @param {String} str 입력 문자열
 * @param {Object} 한글 초성에 해당하는 영문
 * @param {Object} 한글 중성에 해당하는 영문
 * @param {Object} 한글 종성에 해당하는 영문
 * @return {String} 한글로 변환된 문자열
 */
function _korReplace(str,h,b,f) { 
	var en_h = "rRseEfaqQtTdwWczxvg"; 
	var en_b = { 
		k:0,o:1,i:2,O:3,j:4,p:5,u:6,P:7,h:8,hk:9,ho:10,hl:11,y:12,n:13,nj:14,np:15,nl:16,b:17,m:18,ml:19,l:20 
	} 
	var en_f = { 
		"":0,r:1,R:2,rt:3,s:4,sw:5,sg:6,e:7,f:8,fr:9,fa:10,fq:11,ft:12,fx:13,fv:14,fg:15,a:16,q:17,qt:18,t:19,T:20,d:21,w:22,c:23,z:24,x:25,v:26,g:27 
	} 
	return String.fromCharCode(en_h.indexOf(h)*21*28 + en_b[b]*28 + en_f[f] + 44032); 
};

/**
 * 스트링이 한글인지 확인.
 * @param {String} str 문자열
 * @return {Boolean} 한글이면 true
 */
function isKorean(str){		
	var i;
	var ch;
	var retval = true;
	for (i=0;i<str.length;i++) {
		ch = escape(str.charAt(i)); 

		if (strCharByte(ch) != 2) {
			retval = false;
		}
	}
	return retval;
}

/**
 * 스트링 바이트 크기 반환.
 * @param {String} chStr 	문자열
 * @return {Number} 한글이면 2, 아니면 1
 */
function strCharByte(chStr) {
	if (chStr.substring(0, 2) == '%u') {
		if (chStr.substring(2,4) == '00')
			return 1;
		else
			return 2;        //한글
	} else if (chStr.substring(0,1) == '%') {
		if (parseInt(chStr.substring(1,3), 16) > 127)
			return 2;        //한글
		else
			return 1;
	} else {
			return 1;
	}
}

function popLayerAjaxCall(props){	
	$.ajax({
		type: props.type,
		url: props.url,
		data: props.param,
		beforeSend: function(xhr) {},
		success: function(data) {
			//alert(data);
			createPopupLayer(props.layerId);
			$("#"+props.layerId+"_body").html(data);
			//alert($("#layerArea").text());
			showPopupLayer(props.layerId, props.parentLayerId);	
		}
	});
}

function popZipCodeList(zipcode1IdVal, zipcode2IdVal, addr1IdVal, addr2IdVal){
	var params = {
		zipcode1Id : isNull(zipcode1IdVal) ? 'zipcode1' : zipcode1IdVal,
		zipcode2Id : isNull(zipcode2IdVal) ? 'zipcode2' : zipcode2IdVal,
		addr1Id : isNull(addr1IdVal) ? 'addr1' : addr1IdVal,
		addr2Id : isNull(addr2IdVal) ? 'addr2' : addr2IdVal
	};
	var props = {
		type : "POST",
		url : env.contextPath + "/common/popZipCodeList.omp",
		param : params,
		layerId : "popZipCodeList",
		parentLayerId : "container"
	};
	popLayerAjaxCall(props);
}

/**
 * 자주 쓰는 페이지 이동.
 * @return
 */
function gotoPage(page){
	var url = "";
	/*
	 * 메인페이지
	 */
	if (page == 'MAIN') url = env.contextPath + "/main/main.omp";
	/*
	 * 마이페이지
	 */
	else if (page == "MYPAGE") url = env.contextPath + "/member/mypageIntro.omp?mode=intro";
	/*
	 * 로그인
	 */
	else if (page == "LOGIN") url = env.contextPath + "/login/login.omp";
	/*
	 * 로그아웃
	 */
	else if (page == "LOGOUT") url = env.contextPath + "/logout/logout.omp?method=logoutProcess";
	/*
	 * 아이디/패스워드 찾기
	 */
	else if (page == "FINDID") url = env.contextPath + "/login/findId.omp";
	/*
	 * 회원가입
	 */
	else if (page = "REGIST") url = env.contextPath + "/member/registNotice.omp";
	
	top.location.href= url;
}

/**
 * 이메일 체크.
 * @param email
 * @return

function checkEmail(email) {
	if(email.value == ''){
		alert('이메일을 입력해 주세요.');
		email.focus();
		return false;
	}

	if(/^[_0-9a-zA-Z-]+(\.[_0-9a-zA-Z-]+)*@[0-9a-zA-Z-]+(\.)+([0-9a-zA-Z-]+)([\.0-9a-zA-Z-])*$/.test(email.value) == false) {
   		alert('E-mail주소 형식이 아닙니다.\n\r다시 입력해 주세요.');
   		email.focus();
   		return false;
  	}
	return true;
} */

/**
 * 필수입력 필드 체크.
 * @param field
 * @param fieldName
 * @return
 */
function requiredField(field, fieldName) {
	if(field.value == ''){
		alert(fieldName + ' 입력해 주세요.');
		field.focus();
		return false;
	}
	return true;
}

/**
 * 필수입력 필드 체크.
 * @param fieldId
 * @param fieldName
 * @return
 */
function requiredFieldById(fieldId, fieldName) {
	return requiredField(document.getElementById(fieldId), fieldName);
}

/**
 * 숫자만으로 이루어졌는지 체크.
 * @param obj
 * @return
 */
function isNumeric(obj) {
    if(isNaN(obj)) {  
        return false;
    } else {
        return true;
    }
}

/**
 * 전화번호 형식으로 바꾸기
 * 예) 	02282342232 -> 02-8234-2232
 * 		0312437845	-> 031-124-7845
 * 		01071050616	-> 010-7105-0616
 * @param num
 * @return
 */
function phone_format(num){
	return num.replace(/(^02.{0}|^01.{1}|[0-9]{3})([0-9]+)([0-9]{4})/,"$1-$2-$3");
}
